package Data::Conveyor::YAML::Active::Payload::Item;

# $Id: Item.pm 13653 2007-10-22 09:11:20Z gr $

use warnings;
use strict;


our $VERSION = '0.02';


use base 'Class::Scaffold::YAML::Active::Hash';


__PACKAGE__->mk_scalar_accessors(qw(__payload_item));

# generic; subclass should override with the proper
# mk_framework_object_accessors()


sub run_plugin {
    my $self = shift;
    $self->SUPER::run_plugin(@_);
    $self->clear___payload_item;
    $self->__payload_item($self->make_payload_item);
    $self->populate_payload_item;
    $self->__payload_item;
}


# Might be empty if a subclass uses an autovivifying framework_object

sub make_payload_item {}


sub populate_payload_item {
    my $self = shift;

    # Some args are set on the payload object, others are passed to the
    # payload's data object

    $self->set_payload_item_properties;
    $self->populate_payload_item_data;
}


sub move_payload_item_property_from_hash {
    my ($self, $property) = @_;
    return unless $self->__hash_exists($property);
    $self->__payload_item->$property($self->__hash->{$property});
    $self->__hash_delete($property);
}


sub set_payload_item_properties {
    my $self = shift;
    $self->move_payload_item_property_from_hash($_)
        for qw/command exception_container implicit instruction_container/
}


sub populate_payload_item_data {
    my $self = shift;
    local $Class::Value::SkipChecks=1;
    while (my ($key, $value) = each %{$self->__hash}) {
        $self->__payload_item->data->$key($value);
    }
}


1;


__END__

{% USE p = PodGenerated %}

=head1 NAME

{% p.package %} - stage-based conveyor-belt-like ticket handling system

=head1 SYNOPSIS

    {% p.package %}->new;

=head1 DESCRIPTION

None yet. This is an early release; fully functional, but undocumented. The
next release will have more documentation.

=head1 METHODS

=over 4

{% p.write_methods %}

=back

{% p.write_inheritance %}

{% PROCESS standard_pod %}

=cut

